package com.rchat.pocmini.contact;


import com.airtalkee.sdk.AirtalkeeContactPresence;
import com.airtalkee.sdk.entity.AirContact;

/**
 * Created by ljd on 2017/2/6.
 * <p>
 * Weptt系统提供订阅和费订阅两种方式来实现用户在线状态的刷新，订阅模式和非订阅模式同事存在，互不干扰
 * OnContactPresenceListener接口返回与联系人相关的事件，关心此类事件的实例需实现此Interface才会被调用。
 */

public class PocContactPresence implements PocContactPresenceInterface {

    private static AirtalkeeContactPresence airtalkeeContactPresence = AirtalkeeContactPresence.getInstance();
    private static PocContactPresence pocContactPresence;

    //============= CONTACT_STATE状态值 ===========
    //用户不在线
    public static final int CONTACT_STATE_NONE = AirContact.CONTACT_STATE_NONE;
    //用户在线（前台）
    public static final int CONTACT_STATE_ONLINE = AirContact.CONTACT_STATE_ONLINE;
    //用户后台在线
    public static final int CONTACT_STATE_ONLINE_BG = AirContact.CONTACT_STATE_ONLINE_BG;

    private PocContactPresence() {

    }

    /**
     * 返回AirtalkeeContactPresence实例
     *
     * @return airtalkeeContactPresence
     */
    public static PocContactPresence getPocContactPresenceInstance() {
        if (pocContactPresence == null) {
            pocContactPresence = new PocContactPresence();
        }
        return pocContactPresence;
    }

    /**
     * 获取本地缓存的用户状态
     *
     * @param userId 用户ID
     * @return 取值参考CONTACT_STATE(位于AirContactBuilder类)
     */
    @Override
    public int getContactStateById(String userId) {
        return airtalkeeContactPresence.getContactStateById(userId);
    }

    /**
     * 提供第三方处理订阅自定义的用户群状态变化（调用SDK的订阅接口后，须在不需要通知用户状态变化会后，
     * 调用反订阅接口以结束订阅，否则系统将在用户状态发生变化时继续向SDK推状态变化事件），事件返回onContactPresence
     *
     * @param customData 第三方应用自定义的报文，建议可采用json
     */
    @Override
    public void contactPresenceSubscribe(String customData) {
        airtalkeeContactPresence.ContactPresenceSubscribe(customData);
    }

    /**
     * 结束当前进行的订阅
     */
    @Override
    public void contactPresenceUnsubscribe() {
        airtalkeeContactPresence.ContactPresenceUnsubscribe();
    }

    /**
     * 注册PocContactPresenceListener
     *
     * @param listener 监听器
     */
    public void setContactPresenceListener(PocContactPresenceListener listener) {
        airtalkeeContactPresence.setContactPresenceListener(listener);
    }
}
